﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Course2
{
    /// <summary>
    /// 定义委托，学习内置委托，和委托实列化
    /// </summary>
    /// <param name="item"></param>
    /// <returns></returns>
    public delegate bool WhereFunc(int item);
    /// <summary>
    /// 集合的基本操作
    /// </summary>
    internal class Example2
    {
        /// <summary>
        /// 事件
        /// </summary>
        public event WhereFunc Func;
        public void Test()
        {
            var list = new List<int>();
            list.Add(20);
            list.Add(40);
            list.Remove(20);
            list.RemoveAt(1);
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
        }
        public IEnumerable<int> Where(List<int> list, WhereFunc func)
        {
            foreach (var item in list)
            {
                if (func(item))
                {
                    yield return item;//生成器
                }
            }
        }
        /// <summary>
        /// 委托:定义函数原型，函数指针,匿名函数，箭头函数
        /// 委托是类型，函数，拉姆达表达式，匿名函数是实现
        /// 拉姆达表达式：lambda
        /// </summary>
        public void Test1()
        {
            var list = new List<int>()
            {
                20,
                30,
                15,
                47
            };
            Where(list, MyWhereFunc);//函数
            Where(list, (a) => 
            {
                if (a%2==0)
                {
                    return true;
                }
                return false;
            });//lambda函数
            Where(list, a => a % 2 == 0);//lambda表达式
            //定义类型，并赋值
            WhereFunc where = (a) => 
            {
                if (a % 2 == 0)
                {
                    return true;
                }
                return false;
            };
            Where(list, where);
            //内部函数
            bool func(int item)
            {
                return item % 2 == 0;
            }
            Where(list, func);
        }
        public bool MyWhereFunc(int item)
        {
            if (item % 2 == 0)
            {
                return true;
            }
            return false;
        }
    }
}
